<?php

	/**
	 * 抽象类 和 抽象方法
	 *
	 *
	 * 1、什么是抽象方法？
	 * 		定义：一个方法如果没有方法体（一个方法，不适用“{}”,直接使用分号结束的方法，才是没有方法体的方法），则这个方法就是抽象方法。
	 * 		（1）声明一个方法，不使用{},而是直接使用分号结束。
	 * 		（2）如果是抽象方法，必须使用abstract(抽象关键字)方法
	 *
	 * 2、什么是抽象类？
	 * 		（1）如果一个类中有一个方法是抽象的方法，则这个类就是抽象类
	 * 		（2）如果声明一个抽象类，则这个类必须要使用abstract关键字进行修饰
	 * 	注意事项：
	 * 		（1）只要使用abstract修饰的类  就是抽象类
	 * 		（2）抽象类就是一种特殊的类，特殊在（在抽象类中可以有抽象方法）
	 * 		（3）除了在抽象类中可以有抽象方法，以外，和正常的类完全一样
	 *
	 * 		- 抽象类不能实例化对象（不能创建出对象）
	 * 		- 如果看见抽象类，就必须写这个类的子类，将抽象类的抽象方法覆盖（加上方法体）
	 * 		- 子类必须全部实现（覆盖重写）抽象方法，这个子类才能创建对象，如果只实现部分，那么还有抽象方法，则子类也就必须是抽象类。
	 *
	 *
	 * - 抽象方法的作用
	 * > 抽象方法的作用就是规定了子类必须有这个方法的实现，功能交给子类
	 * > 只写出来结构，而没有实现，实现交给具体的子类进行实现。
	 *
	 * - 抽象类的作用
	 * > 就是要求子类的结构，所以就是一个规范
	 *
	 */


	abstract class Person {

		public $name;
		public $age;

		//抽象方法
		abstract function say();
		abstract function eat();

		function run() {
			echo "--------------------------";
		}
	}


	class student extends Person{

		public function say(){
			echo "我继承了Person的Say方法";
		}

		public function eat(){
			echo "我继承了Person的Look方法";
			echo "extends";
		}
	}

	$p = new student();
	$p->say();


	class Chinese extends Person{

		public function say() {
			echo "我是中国人！！！<br>";

		}
		public function eat() {
			echo "我用筷子吃饭！！！<br>";
		}
	}

	class English extends Person{

		public function say() {
			echo "I is English<br>";

		}
		public function eat() {
			echo "I like eating food.<br>";
		}
	}

	$china = new Chinese();
	$English = new English();

	echo $china->say();
	echo $china->eat();

	echo $English->say();
	echo $English->eat();






 ?>
